[Mini2440] 搭建韦东山二期驱动视频学习环境 |
您所在的位置:网站首页 › 韦东山第四期 值不值得 › [Mini2440] 搭建韦东山二期驱动视频学习环境 |
前言 韦东山老师的视频使用的是 JZ2440 开发板,本来使用视频配套的 JZ2440 开发板学习起来才会事半功倍,但是目前我手头上已经有了 mini2440 开发板以及配套的 X35 LCD,想将现有资源充分利用起来。并且韦东山老师经常说天下 2440 开发板都一样,让我更加断绝了购买 JZ2440 的欲望。因此决定使用 mini2440 学习韦东山老师的视频,才有了本文。本文主要记录在 mini2440 上移植 u-boot-1.1.6 和 linux-2.6.22.6 学习环境,总结此文,以便日后查阅。 一 配置编译 u-boot1.1 获取 u-boot 源码并打补丁解压 u-boot 源码 user@vmware:~/mini2440$ tar jxf u-boot-1.1.6.tar.bz2 user@vmware:~/mini2440$ cd u-boot-1.1.6/清除配置 user@vmware:~/mini2440/u-boot-1.1.6$ make distclean创建 git 版本库管理源码 user@vmware:~/mini2440/u-boot-1.1.6$ git init Initialized empty Git repository in /home/user/mini2440/u-boot-1.1.6/.git/ user@vmware:~/mini2440/u-boot-1.1.6$ git add --all user@vmware:~/mini2440/u-boot-1.1.6$ git commit -m "init: get the u-boot source code by 100ask.net"给 u-boot 打补丁 user@vmware:~/mini2440/u-boot-1.1.6$ patch -p1 < ../u-boot-1.1.6_jz2440.patch user@vmware:~/mini2440/u-boot-1.1.6$ git add --all user@vmware:~/mini2440/u-boot-1.1.6$ git commit -m "patch: u-boot-1.1.6_jz2440.patch" 1.2 配置、编译 u-boot配置 user@vmware:~/mini2440/u-boot-1.1.6$ make 100ask24x0_config Configuring for 100ask24x0 board...编译 user@vmware:~/mini2440/u-boot-1.1.6$ make ... ... /opt/gcc/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/armv4t/libgcc.a(_udivsi3.o): In function `__aeabi_uidiv': (.text+0x0): multiple definition of `__udivsi3' lib_arm/libarm.a(_udivsi3.o):/home/user/mini2440/u-boot-1.1.6/lib_arm/_udivsi3.S:17: first defined here arm-linux-ld: ERROR: Source object /opt/gcc/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/armv4t/libgcc.a(_udivdi3.o) has EABI version 5, but target u-boot has EABI version 0 arm-linux-ld: failed to merge target specific data of file /opt/gcc/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/armv4t/libgcc.a(_udivdi3.o) arm-linux-ld: ERROR: Source object /opt/gcc/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/armv4t/libgcc.a(_udivsi3.o) has EABI version 5, but target u-boot has EABI version 0 arm-linux-ld: failed to merge target specific data of file /opt/gcc/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/armv4t/libgcc.a(_udivsi3.o) arm-linux-ld: ERROR: Source object /opt/gcc/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/armv4t/libgcc.a(_dvmd_lnx.o) has EABI version 5, but target u-boot has EABI version 0 arm-linux-ld: failed to merge target specific data of file /opt/gcc/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/armv4t/libgcc.a(_dvmd_lnx.o) arm-linux-ld: ERROR: Source object /opt/gcc/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/armv4t/libgcc.a(_clz.o) has EABI version 5, but target u-boot has EABI version 0 arm-linux-ld: failed to merge target specific data of file /opt/gcc/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/armv4t/libgcc.a(_clz.o) /opt/gcc/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/armv4t/libgcc.a(_dvmd_lnx.o): In function `__aeabi_ldiv0': (.text+0x8): undefined reference to `raise' Makefile:263: recipe for target 'u-boot' failed make: *** [u-boot] Error 1编译报错了,百度确认到是因为我使用的编译器是友善之臂的提供的 4.3.2 版本的编译器,编译器的库文件和 U-Boot 源码中的函有重复定义,换成 100ask 光盘提供的 3.4.5 版本的编译器就不存在此问题。解压 100ask 提供的交叉编译器 user@vmware:~/mini2440/u-boot-1.1.6$ cd ../ user@vmware:~/mini2440$ tar jxf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 user@vmware:~/mini2440$ cd gcc-3.4.5-glibc-2.3.6/bin/ user@vmware:~/mini2440/gcc-3.4.5-glibc-2.3.6/bin$ pwd /home/user/mini2440/gcc-3.4.5-glibc-2.3.6/bin修改 u-boot 的 Makefile 指定编译使用刚刚解压的交叉编译器,修改点如下: user@vmware:~/mini2440/gcc-3.4.5-glibc-2.3.6/bin$ cd ../../u-boot-1.1.6/ user@vmware:~/mini2440/u-boot-1.1.6$ vim Makefile user@vmware:~/mini2440/u-boot-1.1.6$ git diff diff --git a/Makefile b/Makefile index a8fdbb1..f7ed826 100644 --- a/Makefile +++ b/Makefile @@ -125,7 +125,7 @@ ifeq ($(ARCH),ppc) CROSS_COMPILE = powerpc-linux- endif ifeq ($(ARCH),arm) -CROSS_COMPILE = arm-linux- +CROSS_COMPILE = /home/user/mini2440/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- endif ifeq ($(ARCH),i386) ifeq ($(HOSTARCH),i386) user@vmware:~/mini2440/u-boot-1.1.6$ git add --all user@vmware:~/mini2440/u-boot-1.1.6$ git commit -m "conf: modify the cross compiler"重新配置编译 user@vmware:~/mini2440/u-boot-1.1.6$ make distclean user@vmware:~/mini2440/u-boot-1.1.6$ make 100ask24x0_config user@vmware:~/mini2440/u-boot-1.1.6$ make确认到 u-boot.bin 镜像成功生成 user@vmware:~/mini2440/u-boot-1.1.6$ ls -l u-boot.bin -rwxrwxr-x 1 user user 198324 5月 17 22:39 u-boot.bin 1.3 给 u-boot 添加 .gitignore 文件编译完 u-boot 后,通过 git st 查看发现全是编译的中间文件,这些文件根本不需使用版本库进行管理,因此我们要忽略它们。随便解压一个 linux 内核,拷贝内核的忽略规则 user@vmware:~/mini2440/u-boot-1.1.6$ cd ../ user@vmware:~/mini2440$ tar jxf linux-2.6.22.6.tar.bz2 user@vmware:~/mini2440$ cd u-boot-1.1.6/ user@vmware:~/mini2440/u-boot-1.1.6$ cp ../linux-2.6.22.6/.gitignore ./将 kernel 默认的忽略文件拷贝到 u-boot 源码中,很好,大部分的中间文件都成功忽略了,但是通过 git st 查看还是有部分中间文件没有被忽略 user@vmware:~/mini2440/u-boot-1.1.6$ git st On branch master Untracked files: (use "git add ..." to include in what will be committed) examples/hello_world examples/hello_world.bin examples/hello_world.srec include/asm-arm/arch include/asm-arm/proc include/bmp_logo.h include/config.h include/config.mk include/version_autogenerated.h tools/bmp_logo tools/crc32.c tools/envcrc tools/environment.c tools/gen_eth_addr tools/img2srec tools/mkimage u-boot u-boot.bin u-boot.map u-boot.srec nothing added to commit but untracked files present (use "git add" to track)将这些文件手动添加到 .gitignore 文件中,值得注意的是,内核默认的忽略规则会将 . 开头的隐藏文件一并忽略掉,这里需要强制指定不忽略 .gitignore 文件注意:diff 命令的 相当于 git diff 的 - user@vmware:~/mini2440/u-boot-1.1.6$ vim .gitignore user@vmware:~/mini2440/u-boot-1.1.6$ diff .gitignore ../linux-2.6.22.6/.gitignore 5,29d4 < < # < # maiot added rules < # < examples/hello_world < examples/hello_world.bin < examples/hello_world.srec < include/asm-arm/arch < include/asm-arm/proc < include/bmp_logo.h < include/config.h < include/config.mk < include/version_autogenerated.h < tools/bmp_logo < tools/crc32.c < tools/envcrc < tools/environment.c < tools/gen_eth_addr < tools/img2srec < tools/mkimage < u-boot < u-boot.bin < u-boot.map < u-boot.srec < 34,35d8 < # don't ignore the .gitignore file < !.gitignore此时成功将编译的中间文件全部过滤 user@vmware:~/mini2440/u-boot-1.1.6$ git st On branch master Untracked files: (use "git add ..." to include in what will be committed) .gitignore nothing added to commit but untracked files present (use "git add" to track)很好,提交忽略规则到版本库中 user@vmware:~/mini2440/u-boot-1.1.6$ git add --all user@vmware:~/mini2440/u-boot-1.1.6$ git commit -m "conf: add the gitignore rule" 1.4 备份源码到 github 方便下次使用在 github 上创建一个空的仓库,我创建的仓库地址为:[email protected]:mini2440/100ask.u-boot-1.1.6.git查看目前本地仓库的状态,确认到并没有绑定远程仓库 user@vmware:~/mini2440/u-boot-1.1.6$ git remote -v为本地仓库添加远程仓库 user@vmware:~/mini2440/u-boot-1.1.6$ git remote add origin [email protected]:mini2440/100ask.u-boot-1.1.6.git user@vmware:~/mini2440/u-boot-1.1.6$ git remote -v origin [email protected]:mini2440/100ask.u-boot-1.1.6.git (fetch) origin [email protected]:mini2440/100ask.u-boot-1.1.6.git (push)将本地仓库上传到 github 远程仓库中 user@vmware:~/mini2440/u-boot-1.1.6$ git push origin -u master 1.5 使用 github 仓库快速获取源码直接克隆远程仓库配置编译即可注意:成功克隆工程后,您需要修改 Makefile 中交叉编译器路径为您的主机上编译器安装的实际路径。 user@vmware:~/mini2440$ git clone [email protected]:mini2440/100ask.u-boot-1.1.6.git user@vmware:~/mini2440$ cd 100ask.u-boot-1.1.6/ user@vmware:~/mini2440/100ask.u-boot-1.1.6$ make 100ask24x0_config user@vmware:~/mini2440/100ask.u-boot-1.1.6$ make user@vmware:~/mini2440/100ask.u-boot-1.1.6$ ls -l u-boot.bin -rwxrwxr-x 1 user user 198324 5月 20 13:15 u-boot.bin 二 配置编译 linux 内核2.1 获取 linux 内核源码并打补丁在上面 u-boot 中已经解压好了内核源码,这里直接创建仓库就好 user@vmware:~/mini2440$ cd linux-2.6.22.6/ user@vmware:~/mini2440/linux-2.6.22.6$ git init Initialized empty Git repository in /home/user/mini2440/linux-2.6.22.6/.git/ user@vmware:~/mini2440/linux-2.6.22.6$ git add --all user@vmware:~/mini2440/linux-2.6.22.6$ git commit -m "init: upload the linux-2.6.22.6 source code by 100ask.net"给 kernel 打补丁 user@vmware:~/mini2440/linux-2.6.22.6$ patch -p1 < ../linux-2.6.22.6_jz2440.patch user@vmware:~/mini2440/linux-2.6.22.6$ git add --all user@vmware:~/mini2440/linux-2.6.22.6$ git commit -m "patch: linux-2.6.22.6_jz2440.patch" 2.2 修改编译器修改顶层 Makefile 指定编译使用刚刚解压的交叉编译器,修改点如下: user@vmware:~/mini2440/linux-2.6.22.6$ vim Makefile user@vmware:~/mini2440/linux-2.6.22.6$ git diff diff --git a/Makefile b/Makefile index 9b456d0..e98b548 100644 --- a/Makefile +++ b/Makefile @@ -184,7 +184,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ #ARCH ?= $(SUBARCH) ARCH ?= arm -CROSS_COMPILE ?= arm-linux- +CROSS_COMPILE ?= /home/user/mini2440/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- # Architecture as present in compile.h UTS_MACHINE := $(ARCH) user@vmware:~/mini2440/linux-2.6.22.6$ git add --all user@vmware:~/mini2440/linux-2.6.22.6$ git commit -m "conf: modify the cross compiler" 2.3 配置编译内核直接使用 100ask 提供的配置文件配置内核 user@vmware:~/mini2440/linux-2.6.22.6$ cp config_ok .config执行 make 命令开始编译 user@vmware:~/mini2440/linux-2.6.22.6$ make uImage Makefile:1451: *** mixed implicit and normal rules: deprecated syntax /home/user/mini2440/linux-2.6.22.6/Makefile:418: *** mixed implicit and normal rules: deprecated syntax /home/user/mini2440/linux-2.6.22.6/Makefile:1451: *** mixed implicit and normal rules: deprecated syntax make[1]: *** No rule to make target 'silentoldconfig'. Stop. CHK include/linux/version.h make: *** No rule to make target 'include/config/auto.conf', needed by 'include/asm-arm/.arch'. Stop.很遗憾,报错了,百度得到的结论是由于我的系统的 make 工具太新,新工具不兼容旧版规则,参考Maxwell的博客修改,修改点如下: user@vmware:~/mini2440/linux-2.6.22.6$ vim Makefile +416 user@vmware:~/mini2440/linux-2.6.22.6$ git diff diff --git a/Makefile b/Makefile index d6806d0..a52ab44 100644 --- a/Makefile +++ b/Makefile @@ -415,7 +415,7 @@ ifeq ($(config-targets),1) include $(srctree)/arch/$(ARCH)/Makefile export KBUILD_DEFCONFIG -config %config: scripts_basic outputmakefile FORCE +%config: scripts_basic outputmakefile FORCE $(Q)mkdir -p include/linux include/config $(Q)$(MAKE) $(build)=scripts/kconfig $@ @@ -1448,7 +1448,7 @@ endif $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) # Modules -/ %/: prepare scripts FORCE +%/: prepare scripts FORCE $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ $(build)=$(build-dir) %.ko: prepare scripts FORCE user@vmware:~/mini2440/linux-2.6.22.6$ git add Makefile user@vmware:~/mini2440/linux-2.6.22.6$ git commit -m "conf: fix new make tool can't compatible the old kernel"修改好后重新 make 试试 user@vmware:~/mini2440/linux-2.6.22.6$ make uImage ... ... LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready UIMAGE arch/arm/boot/uImage "mkimage" command not found - U-Boot images will not be built Image arch/arm/boot/uImage is read很遗憾 uImage 还是没有成功编译出来,提示说需要 mkimage 工具,安装 mkimage 后试试 user@vmware:~/mini2440/linux-2.6.22.6$ sudo apt-get install u-boot-tools user@vmware:~/mini2440/linux-2.6.22.6$ make uImage ... ... Image Name: Linux-2.6.22.6 Created: Tue May 1 19:39:40 2018 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1812732 Bytes = 1770.25 kB = 1.73 MB Load Address: 30008000 Entry Point: 30008000 Image arch/arm/boot/uImage is ready user@vmware:~/mini2440/linux-2.6.22.6$ ls -l arch/arm/boot/uImage -rw-rw-r-- 1 user user 1845932 5月 20 20:59 arch/arm/boot/uImage 2.4 修改 lcd 驱动由于我使用的是 mini2440 开发板,配套的 LCD 是 X35,使用 100ask 提供的 lcd 驱动无法直接点亮,因此需要修改 lcd 驱动文件。参考comwise的博客将 X35 屏幕的驱动移植到 kenrel 中,可以点亮 LCD。注意:博客提供的 LCD 驱动,直接移植好后编译会报错,需要屏蔽其中三行报错的头文件。我将修改好的 LCD 驱动和网卡驱动放了一份在 [email protected]:mini2440/100ask.lcd.and.net.driver.git 仓库中,可以克隆这个仓库获取,获取仓库的命令如下 user@vmware:~/mini2440$ git clone [email protected]:mini2440/100ask.lcd.and.net.driver.git拷贝 LCD 驱动到内核中 user@vmware:~/mini2440$ cp -av 100ask.lcd.and.net.driver/drivers/video/mini2440_lcd_x35.c linux-2.6.22.6/drivers/video/ '100ask.lcd.and.net.driver/drivers/video/mini2440_lcd_x35.c' -> 'linux-2.6.22.6/drivers/video/mini2440_lcd_x35.c'修改驱动目录下的 Makefile 使驱动被编译到 user@vmware:~/mini2440/linux-2.6.22.6$ vim drivers/video/Makefile user@vmware:~/mini2440/linux-2.6.22.6$ git diff diff --git a/drivers/video/Makefile b/drivers/video/Makefile old mode 100644 new mode 100755 index bd8b052..6f40cae --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -106,7 +106,11 @@ obj-$(CONFIG_FB_MAXINE) += maxinefb.o obj-$(CONFIG_FB_TX3912) += tx3912fb.o obj-$(CONFIG_FB_S1D13XXX) += s1d13xxxfb.o obj-$(CONFIG_FB_IMX) += imxfb.o -obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o + +# [email protected] 20180520 begin >>> [2/2] realize the mini2440 x35 lcd driver +obj-$(CONFIG_FB_S3C2410) += mini2440_lcd_x35.o +# [email protected] 20180520 end >> [2/2] realize the dm9000 net driver +obj-$(CONFIG_DM9000) += mini2440_dm9000.o +# [email protected] 20180520 end cd workD:\work>oflash 0 1 0 0 0 u-boot.bin+---------------------------------------------------------+| Flash Programmer v1.5.2 for OpenJTAG of www.100ask.net || OpenJTAG is a USB to JTAG & RS232 tool based FT2232 || This programmer supports both of S3C24X0 & S3C6410 || Author: Email/MSN([email protected]), QQ(17653039) |+---------------------------------------------------------+Usage:1. oflash, run with cfg.txt or prompt2. oflash [file], write [file] to flash with prompt3. oflash [-f config_file]4. oflash [jtag_type] [cpu_type] [flash_type] [read_or_write] [offset] [file]Select the JTAG type:0. OpenJTAG1. Dongle JTAG(parallel port)2. Wiggler JTAG(parallel port)Enter the number: 0Select the CPU:0. S3C24101. S3C24402. S3C6410Enter the number: 1device: 4 "2232C"deviceID: 0x14575118SerialNumber: FThecwJmADescription: USBJTAG&RS232 AS3C2440 detected, cpuID = 0x0032409d[Main Menu] 0:Nand Flash prog 1:Nor Flash prog 2:Memory Rd/Wr 3:ExitSelect the function to test:0[NAND Flash JTAG Programmer]Scan nand flash:Device 0: NAND 256MiB 3,3V 8-bit, sector size 128 KiBTotal size: 256 MiB 0:Nand Flash Program 1:Nand Flash Print BlkPage 2:ExitSelect the function to test :0[NAND Flash Writing Program]Source size: 0x306b4Available target block number: 0~2047Input target block number:0target start block number =0target size (0x20000*2) =0x40000STATUS:EppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppEppppppppppppppppppppppppppppppppp 3.2 使用 nandflash 启动开发板成功下载 u-boot.bin 到 nandflash 后,将启动选项设置为 nand 启动,上电有以下 log 输出说明 u-boot 成功运行 1234567891011121314151617181920212223242526272829303132333435363738U-Boot 1.1.6-g48373b63 (May 17 2018 - 22:46:07)DRAM: 64 MBFlash: 0 kBNAND: 256 MiBIn: serialOut: serialErr: serialUPLLVal [M:38h,P:2h,S:2h]MPLLVal [M:5ch,P:1h,S:1h]CLKDIVN:5h+---------------------------------------------+| S3C2440A USB Downloader ver R0.03 2004 Jan |+---------------------------------------------+USB: IN_ENDPOINT:1 OUT_ENDPOINT:3FORMAT: +++NOTE: Power off/on or press the reset button for 1 sec in order to get a valid USB device address.Hit any key to stop autoboot: 0##### 100ask Bootloader for OpenJTAG #####[n] Download u-boot to Nand Flash[k] Download Linux kernel uImage[j] Download root_jffs2 image[y] Download root_yaffs image[d] Download to SDRAM & Run[z] Download zImage into RAM[g] Boot linux from RAM[f] Format the Nand Flash[s] Set the boot parameters[b] Boot the system[r] Reboot u-boot[q] Quit from menuEnter your selection: qOpenJTAG> 3.3 下载 kernel 到 nandflash 上u-boot 成功烧写后,便可以使用 u-boot 的 tftp 命令可以下载文件到 SDRAM 中。 使用 tftp 命令下载的前提是: 开发板和 Windows 主机通过网线接在同一个路由器上 Windows 主机上启动了 TPTP 服务配置好 Windows 主机的 ip,这里我的 Windows 主机的 ip 配置为 192.168.1.5。Windows 主机行运行 tftp 服务器软件,服务器 ip 默认就是 Windows 主机 ip。同时将要通过通过 tftp 下载到开发板的文件拷贝到 tftpd32.exe 服务器软件同级目录下。这里我拷贝了内核文件 uImage 和文件系统 fs_qtopia.yaffs2 到 tftp 目录下。 依次执行以下步骤将 kernel 烧写到 nandflash 中: 配置好开发板的 ip 以及 tftp 服务器 ip上电后,按下空格进入 U-Boot,执行下面的命令设置环境变量中开发板的 ip 为 192.168.1.8,指定 tftp 服务器的 ip 为 192.168.1.5。 OpenJTAG> setenv ipaddr 192.168.1.100 OpenJTAG> setenv serverip 192.168.1.5 OpenJTAG> save OpenJTAG> reset使用小米路由器的话请使用下面的命令进行配置,需要多配置网关 ip 这一项: OpenJTAG> setenv ipaddr 192.168.31.230 OpenJTAG> setenv serverip 192.168.31.43 OpenJTAG> setenv gatewayip 192.168.31.1 OpenJTAG> save OpenJTAG> reset重启 U-Boot 之后使用 tftp 命令将 tftp 服务器中的文件下载到 SDRAM 0x30000000 地址处 OpenJTAG> tftp 30000000 uImage擦除 kernel 分区后再烧写到 nandflash 中所谓的 kernel 分区其实只是 nandfalsh 中 0x00060000 - 0x00260000 这段地址空间 OpenJTAG> nand erase kernel接下来要烧写到 nandflash 中,下面两条命令效果一致,二选一即可 OpenJTAG> nand write.jffs2 30000000 kernel OpenJTAG> nand write.jffs2 30000000 60000 200000这条命令的意思是:将 SDRAM 中 0x30000000 地址开始连续 0x200000 个字节写入 nandflash 0x60000 地址中去 3.4 下载文件系统到 nandflash 上同样的方式,执行下列命令可以将文件系统烧写到 nandflash 中 OpenJTAG> tftp 30000000 fs_qtopia.yaffs2 OpenJTAG> nand erase root烧写到 nandflash 中,下面三条命令效果一致,三选一即可 OpenJTAG> nand write.yaffs 30000000 root OpenJTAG> nand write.yaffs 30000000 260000 $(filesize) OpenJTAG> nand write.yaffs 30000000 260000 2f76b40上面烧写命令的含义其实就是,将 SDRAM 中 0x30000000 地址开始连续 0x2f76b40(49769280) 个字节写入 nandflash 0x260000 地址中去。不难发现其实 2f76b40 这个值就是 fs_qtopia.yaffs2 文件的大小。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |